/**
 * 简化的AI Agent系统测试
 * 直接测试Mastra配置和基本功能
 */

import { mastra } from '../mastra/index';

/**
 * 测试Mastra配置
 */
async function testMastraConfig() {
  console.log('\n=== 测试Mastra配置 ===');
  
  try {
    console.log('Mastra实例:', mastra ? '✅ 已创建' : '❌ 未创建');
    
    if (mastra) {
      console.log('已注册的工作流:', Object.keys(mastra.workflows || {}));
      console.log('已注册的Agent:', Object.keys(mastra.agents || {}));
      
      // 测试获取Agent
      const caseAgent = mastra.getAgent('caseGeneratorAgent');
      const suspectAgent = mastra.getAgent('suspectAgent');
      const investigationWorkflow = mastra.getWorkflow('investigationWorkflow');
      
      console.log('案件生成Agent:', caseAgent ? '✅ 可用' : '❌ 不可用');
      console.log('嫌疑人Agent:', suspectAgent ? '✅ 可用' : '❌ 不可用');
      console.log('调查工作流:', investigationWorkflow ? '✅ 可用' : '❌ 不可用');
    }
    
    return true;
  } catch (error) {
    console.error('❌ Mastra配置测试失败:', error);
    return false;
  }
}

/**
 * 测试案件生成Agent
 */
async function testCaseGeneratorAgent() {
  console.log('\n=== 测试案件生成Agent ===');
  
  try {
    const agent = mastra.getAgent('caseGeneratorAgent');
    if (!agent) {
      throw new Error('案件生成Agent不可用');
    }
    
    console.log('正在生成测试案件...');
    
    const response = await agent.stream([
      {
        role: 'user',
        content: '请生成一个简单难度的办公室推理案件，包含3个嫌疑人。使用generate-case工具来创建完整的案件数据。'
      }
    ]);
    
    let result = '';
    for await (const chunk of response.textStream) {
      result += chunk;
    }
    
    console.log('✅ 案件生成Agent响应成功');
    console.log('响应长度:', result.length, '字符');
    console.log('工具调用数量:', response.toolCalls?.length || 0);
    
    if (response.toolCalls && response.toolCalls.length > 0) {
      console.log('工具调用结果:', response.toolCalls[0].result ? '✅ 有数据' : '❌ 无数据');
    }
    
    return true;
  } catch (error) {
    console.error('❌ 案件生成Agent测试失败:', error);
    return false;
  }
}

/**
 * 测试嫌疑人Agent
 */
async function testSuspectAgent() {
  console.log('\n=== 测试嫌疑人Agent ===');
  
  try {
    const agent = mastra.getAgent('suspectAgent');
    if (!agent) {
      throw new Error('嫌疑人Agent不可用');
    }
    
    console.log('正在测试嫌疑人对话...');
    
    const response = await agent.stream([
      {
        role: 'user',
        content: `
        你现在要扮演嫌疑人：李助理
        
        ## 角色信息
        - 姓名：李助理
        - 性格：谨慎内向
        - 背景：新入职员工，渴望证明自己
        - 不在场证明：在会议室参加重要会议
        - 当前情绪：calm
        - 可疑程度：3/10
        - 是否为真凶：否
        
        ## 侦探的问题
        "你当时在哪里？"
        
        请使用suspect-dialogue工具来处理这次对话。
        `
      }
    ]);
    
    let result = '';
    for await (const chunk of response.textStream) {
      result += chunk;
    }
    
    console.log('✅ 嫌疑人Agent响应成功');
    console.log('响应长度:', result.length, '字符');
    console.log('工具调用数量:', response.toolCalls?.length || 0);
    
    return true;
  } catch (error) {
    console.error('❌ 嫌疑人Agent测试失败:', error);
    return false;
  }
}

/**
 * 运行所有测试
 */
async function runAllTests() {
  console.log('🚀 开始简化测试\n');
  
  const startTime = Date.now();
  let passedTests = 0;
  let totalTests = 0;
  
  // 测试1: Mastra配置
  totalTests++;
  if (await testMastraConfig()) {
    passedTests++;
  }
  
  // 测试2: 案件生成Agent
  totalTests++;
  if (await testCaseGeneratorAgent()) {
    passedTests++;
  }
  
  // 测试3: 嫌疑人Agent
  totalTests++;
  if (await testSuspectAgent()) {
    passedTests++;
  }
  
  const endTime = Date.now();
  const duration = (endTime - startTime) / 1000;
  
  console.log(`\n📊 测试结果: ${passedTests}/${totalTests} 通过`);
  console.log(`⏱️ 总耗时: ${duration.toFixed(2)}秒`);
  
  if (passedTests === totalTests) {
    console.log('🎉 所有测试通过！');
  } else {
    console.log('⚠️ 部分测试失败，请检查错误信息');
  }
}

/**
 * 主函数
 */
async function main() {
  try {
    await runAllTests();
  } catch (error) {
    console.error('测试过程中发生错误:', error);
    process.exit(1);
  }
}

// 如果直接运行此文件，则执行测试
if (require.main === module) {
  main();
}

export { runAllTests };